package lider;

import java.util.ArrayList;

public class Buscador {
	
	private ArrayList<Traductor> aerolineas;
	
	public Buscador() {
		super();
		this.aerolineas = new ArrayList<Traductor>();
	}

	public void agregarAerolinea(Traductor traductorLanchita) {
		this.aerolineas.add(traductorLanchita);
	}

	public ArrayList<ArrayList<String>> decimeAsientosPara(Busqueda busqueda, Usuario usuario) {

		ArrayList<ArrayList<String>> asientos = new ArrayList<ArrayList<String>>();
		
		for (int i = 0; i < aerolineas.size(); i++) {
			asientos.addAll(aerolineas.get(i).BuscarAsientosQueTengan(
					busqueda.getCiudadOrigen(), busqueda.getFechaSalida(),
					busqueda.getHoraSalida(), busqueda.getCiudadDestino(),
					busqueda.getFechaLlegada(), busqueda.getHoraLlegada()));
		}
		
		asientos = busqueda.getFiltro().filtrar(asientos, busqueda);
	
		asientos = this.filtrarPorUsuario(usuario, asientos);
		
		usuario.agregarBusqueda(busqueda);
		
		return asientos;
	}
	
	public ArrayList<ArrayList<String>> filtrarPorUsuario(Usuario usuario, ArrayList<ArrayList<String>> asientos)
	{
		ArrayList<ArrayList<String>> asientosADevolver = new ArrayList<ArrayList<String>>();
		if(!usuario.sosVip()) /* Si no es vip eliminar todos los asientos que sea super ofertas
							     TODO implementar esto como un metodo de la futura clase Asiento */
		{	
			for(ArrayList<String> asiento: asientos) 
			{
				if(!(asiento.get(2) == "P" && Integer.parseInt(asiento.get(1)) < 8000)&&
			       !(asiento.get(2) == "E" && Integer.parseInt(asiento.get(1)) < 4000))
						asientosADevolver.add(asiento); // Si no es una superoferta la agrego
			}
		}
		else
			asientosADevolver = asientos;
		return asientosADevolver;
	}
	
	public void comprarAsiento(ArrayList<String> asiento, Usuario usuario){
		ArrayList<ArrayList<String>> asientos = new ArrayList<ArrayList<String>>();
		boolean loEncontro=false;
		
		while(!loEncontro)
			for (int i = 0; i < aerolineas.size(); i++) {
				asientos = aerolineas.get(i).BuscarAsientosQueTengan(null, null,null, null,null, null);
				if(loEncontro = asientos.contains(asiento)){
					aerolineas.get(i).comprarAsiento(asiento);
					double montoAPagar = Double.parseDouble(asiento.get(1));
					montoAPagar=montoAPagar + aerolineas.get(i).impuestos(asiento);
					usuario.paga(montoAPagar);
					
				}
			}
		
		
	}
	
}